import { Request, Response, NextFunction } from 'express';
// 引入JWT模块
import jsonwebtoken from 'jsonwebtoken';
// token加密所使用的秘钥
const tokenKey = 'qwer1234';
// 普通用户鉴权中间件
export function authorizeHandlerNormal(
  req: Request, 
  res: Response, 
  next: NextFunction
): void {
  // 获取请求头中的token数据
  let token = req.headers.token as string;
  // Token不存在，提示登录
  if (!token || token.length === 0) {
    res.status(401).json({
      error: '请先登录!'
    });
  } else {
    // 进行token解析
    jsonwebtoken.verify(token, tokenKey, (err: any, decode: any) => {
      if (err) {
        // 解析异常提醒重新登录
        res.status(401).json({
          error: 'Token异常或过期，请重新登录!'
        });
      } else {
        // 将解析的结果重新加入到请求头中，传送到下一个处理步骤
        req.headers.user = decode;
        next();
      }
    });
  }
}
// 管理员用户鉴权中间件，用在只能管理员访问的接口中
export function authorizeHandleAdmin(
  req: Request, 
  res: Response, 
  next: NextFunction
): void {
  // 获取请求头中的token数据
  let token = req.headers.token as string;
  // Token不存在，提示登录
  if (!token || token.length === 0) {
    res.status(401).json({
      error: '请先登录!'
    });
  } else {
    // 进行token解析
    jsonwebtoken.verify(token, tokenKey, (err: any, decode: any) => {
      if (err) {
        // 解析异常提醒重新登录
        res.status(401).json({
          error: 'Token异常或过期，请重新登录!'
        });
      } else {
        // 判断用户权限，不是管理员则提示无账号权限
        if (decode.role !== 'admin') {
          res.status(401).json({
            error: '无管理员权限，请登录管理员账号!'
          });
        } else {
          // 将解析的结果重新加入到请求头中，传送到下一个处理步骤
          req.headers.user = decode;
          next();
        }
      }
    });
  }
}